package com.itheima.controller;

import com.itheima.common.entity.Result;
import com.itheima.common.utils.SMSUtils;
import com.itheima.common.utils.ValidateCodeUtils;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@Slf4j
@RestController
@RequestMapping("/validateCode")
@Api(tags = "验证码相关接口")
public class ValidateCodeController {
    @Autowired
    private RedisTemplate redisTemplate;
    private static final String CODE_KEY_PREFIX = "validate_code_";
    @PostMapping("/send4Order")
    public Result send4Order(String telephone) {
        log.info("验证码发送到手机：{}",telephone);
        String code4String = ValidateCodeUtils.generateValidateCode4String(6);
        redisTemplate.opsForValue().set(CODE_KEY_PREFIX+telephone,code4String,5, TimeUnit.MINUTES);
        //发送验证码
        SMSUtils.sendMessage(SMSUtils.VALIDATE_CODE,telephone, code4String);
        return new Result(true, "验证码发送成功");
    }

    @GetMapping("/send4Login")
    public Result send4Login(@RequestParam String telephone) {
        log.info("手机快速登录发送验证码：{}",telephone);
        String code4String = ValidateCodeUtils.generateValidateCode4String(6);
        redisTemplate.opsForValue().set(CODE_KEY_PREFIX+telephone,code4String,5, TimeUnit.MINUTES);
        //发送验证码
        SMSUtils.sendMessage(SMSUtils.VALIDATE_CODE,telephone, code4String);
        return new Result(true, "验证码发送成功");
    }

    /*
      1. 验证码保存到redis，保存5分钟，超时自动删除。

      2. 校验用户输入的验证码是否正确。Redis

      3. 预约日期的预约人数没有设置的话不能预约。 t_ordersetting  where orderDate = ?

      4. 预约日期是否已经约满，如果已经约满则无法预约。 number > reservations (可以预约)

      5. 不能重复预约（同一个用户在同一天预约了同一个套餐）。t_member(id)  ->  t_order where member_id = ? and orderDate = ? and setmeal_id = ?

      6. 当前用户不是会员，需要自动完成注册。t_member where phoneNumber = ? 如果是null,则插入一条数据。如果是不为null，做更新操作

      7. 更新已预约人数  insert t_order; update t_ordersetting set reservations = reservations +1;
     */

}
